草庐IT

C++ volatile 放置 新

全部标签

java - 为什么将 Java 变量标记为 volatile 会降低同步性?

因此,我刚刚在为我明天要学习的部分编写一些示例时了解了volatile关键字。我写了一个快速程序来证明++和--操作不是原子的。publicclassQ3{privatestaticintcount=0;privatestaticclassWorker1implementsRunnable{publicvoidrun(){for(inti=0;i正如预期的那样,这个程序的输出通常是这样的:-1521-39000000但是,当我改变时:privatestaticintcount=0;到privatestaticvolatileintcount=0;我的输出变为:030771-3365-1

java - Java 中的变量声明放置指南

关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。ImprovethisquestionJava变量似乎有两种公认的变量声明放置方式,每种都有不同的存在理由。来自Sun'scodeconventions我们可以看到:Putdeclarationsonlyatthebeginningofblocks.(Ablockisanycodesurroundedbycurlybraces"{"and"}".)Don'twaittodeclarevariablesuntiltheirfirst

java - 声明一个对象为 volatile

如果在Java中将一个成员变量声明为volatile,是不是意味着该对象的所有数据都存储在volatile内存中,还是该对象的引用存储在volatile内存中?例如,如果我有以下类(class):classC{inti=0;charc='c';}如果我声明它的一个实例如下:privatevolatileCobj;是将对obj的引用存储在volatile内存中,还是将obj的数据(obj.i和obj.c)在volatile内存中?它是否使obj.c和obj.i线程安全? 最佳答案 是的,只有对象引用会被JVM认为是易变的,而不是驻留在

c# - c# 和 java 的 volatile 关键字的行为是否相同?

我知道在java中,如果您有多个线程访问未标记为volatile的变量,您可能会遇到一些意外行为。例子:privatebooleanbExit;while(!bExit){checkUserPosition();updateUserPosition();}如果您将bExit变量标记为voilatile,这将保证其他线程将看到最新的值。c#的行为方式是否相同?更新例如,在C#中,如果您这样做:intcounter=...;for(...){newThread(delegate(){Interlocked.Decrement(refcounter);}}if(counter==0){//h

java - 如何使用 volatile 变量编写简单的线程安全类?

我想编写一个简单的线程安全类,可用于设置或获取整数值。最简单的方法是使用synchronized关键字:publicclassMyIntegerHolder{privateIntegervalue;synchronizedpublicIntegergetValue(){returnvalue;}synchronizedpublicvoidsetValue(Integervalue){this.value=value;}}我也可以尝试使用volatile:publicclassMyIntegerHolder{privatevolatileIntegervalue;publicIntege

java - Java volatile 变量在读取之前是否强加了先行关系?

我有一段代码是这样的:片段A:classCreature{privatestaticlongnumCreated;publicCreature(){synchronized(Creature.class){numCreated++;}}publicstaticlongnumCreated(){returnnumCreated;}}根据我的理解,由于numCreated的读取不是同步的,如果Thread-A在下午1点创建了一个Creature,而Thread-B读取了numCreated()在下午2点,numCreated()很可能返回0或1(即使Thread-A在下午1.05完成了对象

java - 为什么 FutureTask 中的结果对象是非 volatile 的?

我读了jsr166中的FutureTask类,发现outcome对象是non-volatile的,代码中的注释是“non-volatile,protectedbystatereads/writes”第75行,state是volatileint。我已经从JavaLanguageSpec阅读了Java内存模型,但没有找到准确的答案。有人知道原因吗? 最佳答案 考虑这个程序:volatileintstate;Integerresult;voidsucceed(Integerresult)if(state==PENDING)vr0this.

java - 如果线程修改的变量被标记为 volatile,为什么 false 共享是一个问题

我一直在看MartinThompson的文章。这是对错误共享的解释。http://mechanical-sympathy.blogspot.co.uk/2011/07/false-sharing.htmlpublicfinalclassFalseSharingimplementsRunnable{publicfinalstaticintNUM_THREADS=4;//changepublicfinalstaticlongITERATIONS=500L*1000L*1000L;privatefinalintarrayIndex;privatestaticVolatileLong[]lon

Java:我应该在哪里放置匿名监听器逻辑代码?

我们在工作中争论过什么是在java中使用监听器的最佳实践:监听器逻辑是应该留在匿名类中,还是应该放在单独的方法中,例如:button.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){//codehere}});或button.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){buttonPressed();}});privatevoidbuttonPressed(){//co

java - 为什么 JPA2 MetaModel 会生成带有 volatile 成员的对象?

我刚刚使用org.apache.openjpa.persistence.meta.AnnotationProcessor6为我的JPA2实体生成元模型。@javax.annotation.Generated(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",date="TueNov2209:49:03CET2011")publicclassEntity_{publicstaticvolatileSingularAttributeid;publicstaticvolatileSingularAttribute